home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 49
/
Amiga Format CD49 (2000-01-17)(Future Publishing)(GB)(Track 1 of 3)[!][issue 2000-02].iso
/
-serious-
/
graphics
/
amicad
/
arexx
/
importfile1.0
< prev
next >
Wrap
Text File
|
1999-12-06
|
11KB
|
378 lines
/* Chargement d'un fichier version 1.0 */
/* 3 Février 1999: version 1.01 (doublage guillemets dans textes, correction DRAWMODE bus) */
/* 21 février 1999: version 1.02 (modif appel REQFILE, correction routine lire_chaine ) */
/* 25 mars 1999: version 1.03 (ajout SETDEV, setclip(chemin_AmiCAD)) */
/* 17 avril 1999: version 1.04 (utilisation DELETE(-1) */
/* 19 avril 1999: version 1.05 (modification traitement largeur trait pour DRAWMODE) */
/* 22 mai 1999: version 1.06 (correction test fichier) */
/* $VER: ImportFile 1.06 (© R.Florac, 22/05/99) */
options results /* indispensable pour récupérer le résultat des macros */
signal on error /* pour l'interception des erreurs */
signal on syntax
'VERSION(0)'
if result < 2 then do
'MESSAGE("Ce script nécessite"+CHR(10)+"AmiCAD version 2")'
exit
end
fichier=0
'SELSHEET(-1)'; nf=result
'OBJECTS(-1)'; objets=result
if objets>0 then do
'REQUEST("Le document actuel"+CHR(10)+"contient déjà 'objets' objets"+CHR(10)+"Voulez-vous charger"+CHR(10)+"ce fichier dans une"+CHR(10)+"nouvelle fenêtre?")'
if result=1 then do
'NEW("")'
'SELSHEET(-1)'; nf=result
end
else do
'REQUEST("Voulez-vous conserver"+CHR(10)+"les objets actuels?"+CHR(10)+"Le nouveau schéma sera"+CHR(10)+"chargé par dessus.")'
if result=0 then do
'SELSHEET('nf'):DELETE(-1)'
end
end
end
chemin=getclip(chemin_AmiCAD)
if chemin="" then chemin="Travail:AmiCAD/Schémas"
'REQFILE("Fichier à charger?","'chemin'","")'; f=result
if f="" then exit
if open(fichier,f,'READ') then do
setclip(chemin_AmiCAD, ParseFileName(f,PATH))
entete=lire_chaine(fichier)
if entete~="AmiCADFile 1.0" then do
if entete="AmiCADFile 1.1" then do
close(fichier)
'REQUEST("Ce fichier est au"+CHR(10)+"nouveau format!"+CHR(10)+"Voulez-vous le charger?")'
if result = 1 then 'LOAD("'f'")'
exit
end
else 'MESSAGE("Format fichier incorrect")'
close(fichier)
exit
end
'SELSHEET('nf'):WTOFRONT('nf'):FILENAME("'f'"):LOCK(-1)'
objets=0; objet=0; gmaxi=0
do until eof(fichier)
groupe=0
type=lire_octet(fichier)
largeur_trait=1
if type='FIN' then leave
if type>63 then do
if type>127 then do
groupe=1
type=type-128
end
if type>63 then do
largeur_trait=lire_octet(fichier)
type=type-64
end
else largeur_trait=1
end
if largeur_trait>3 then largeur_trait=0-largeur_trait
if groupe~=0 then groupe=lire_valeur(fichier)
select
when type=1 then do /* composant */
comp=lire_chaine(fichier)
circuit=lire_octet(fichier)
if circuit>0 then 'SETDEV(0,'circuit')'
x0=lire_valeur(fichier)
y0=lire_valeur(fichier)
call lire_mode(fichier)
call lire_echelles(fichier)
'DRAWMODE('largeur_trait'):CONVERT(0,0):SETPINS(0,1):PUTPART("'comp'",'x0','y0')';
objet=result; composant=objet
objets=objets+1
end
when type=13 then do /* Définition fenêtre */
lt=lire_valeur(fichier)
ht=lire_valeur(fichier)
lf=lire_valeur(fichier)
hf=lire_valeur(fichier)
xg=lire_valeur(fichier)
yh=lire_valeur(fichier)
xo=lire_valeur(fichier)
yo=lire_valeur(fichier)
'SELSHEET('nf'):DIMSHEET('lt','ht'):WINDOW('xg','yh','lf','hf'):LOCK('nf')'
end
when type=14 then do /* Définition bibliothèque */
lib=lire_chaine(fichier)
'LOADLIB("'lib'")'
end
when type=2 then do /* fil de liaison */
x0=lire_valeur(fichier)
y0=lire_valeur(fichier)
x1=lire_valeur(fichier)
y1=lire_valeur(fichier)
'DRAWMODE(1):DRAW('x0','y0','x1','y1')'; objet=result
objets=objets+1
end
when type=3 then do /* arc de cercle */
'DRAWMODE('largeur_trait')'
x0=lire_valeur(fichier)
y0=lire_valeur(fichier)
rh=lire_valeur(fichier)
rv=lire_valeur(fichier)
ad=lire_valeur(fichier)
af=lire_valeur(fichier)
'ARC('x0','y0','rh','rv','ad','af')'; objet=result
objets=objets+1
end
when type=4 then do /* texte */
'DRAWMODE('largeur_trait')'
t=lire_chaine(fichier)
x0=lire_valeur(fichier)
y0=lire_valeur(fichier)
call lire_mode(fichier)
call lire_echelles(fichier)
'WRITE("'doublage_guillemets(t)'",'x0','y0')'; objet=result
objets=objets+1
end
when type=5 then do /* référence composant */
'DRAWMODE('largeur_trait')'
t=lire_chaine(fichier)
x0=lire_valeur(fichier)
y0=lire_valeur(fichier)
call lire_mode(fichier)
call lire_echelles(fichier)
'WRITE("'t'",'x0','y0')'; objet=result
'LINKREF('composant','objet')'
objets=objets+1
end
when type=6 then do /* valeur composant */
'DRAWMODE('largeur_trait')'
t=lire_chaine(fichier)
x0=lire_valeur(fichier)
y0=lire_valeur(fichier)
call lire_mode(fichier)
call lire_echelles(fichier)
'WRITE("'t'",'x0','y0')'; objet=result
'LINKVAL('composant','objet')'
objets=objets+1
end
when type=23 | type=7 then do /* connexion */
x0=lire_valeur(fichier)
y0=lire_valeur(fichier)
call lire_echelles(fichier)
if type=23 then 'CONVERT(0,1)'
else 'CONVERT(0,0)'
'JUNCTION('x0','y0')'; objet=result
objets=objets+1
end
when type=8 then do /* pointillés */
x0=lire_valeur(fichier)
y0=lire_valeur(fichier)
x1=lire_valeur(fichier)
y1=lire_valeur(fichier)
'DRAWMODE(0):DRAW('x0','y0','x1','y1')'; objet=result
objets=objets+1
end
when type=9 then do /* bus */
x0=lire_valeur(fichier)
y0=lire_valeur(fichier)
x1=lire_valeur(fichier)
y1=lire_valeur(fichier)
'DRAWMODE(3):DRAW('x0','y0','x1','y1')'; objet=result
objets=objets+1
end
when type=10 then do /* ellipse */
'DRAWMODE('largeur_trait')'
x0=lire_valeur(fichier)
y0=lire_valeur(fichier)
rh=lire_valeur(fichier)
rv=lire_valeur(fichier)
'ELLIPSE('x0','y0','rh','rv')'; objet=result
objets=objets+1
end
when type=11 then do /* connecteur entrée */
'DRAWMODE('largeur_trait')'
t=lire_chaine(fichier)
x0=lire_valeur(fichier)
y0=lire_valeur(fichier)
call lire_mode(fichier)
call lire_echelles(fichier)
'INPUT("'t'",'x0','y0')'; objet=result
objets=objets+1
end
when type=12 then do /* connecteur de sortie */
'DRAWMODE('largeur_trait')'
t=lire_chaine(fichier)
x0=lire_valeur(fichier)
y0=lire_valeur(fichier)
call lire_mode(fichier)
call lire_echelles(fichier)
'OUTPUT("'t'",'x0','y0')'; objet=result
objets=objets+1
end
when type=15 then do /* trait double */
'DRAWMODE(2)'
x0=lire_valeur(fichier)
y0=lire_valeur(fichier)
x1=lire_valeur(fichier)
y1=lire_valeur(fichier)
'DRAW('x0','y0','x1','y1')'; objet=result
objets=objets+1
end
when type=16 then do /* composant sans bornes */
comp=lire_chaine(fichier)
circuit=lire_octet(fichier)
if circuit>0 then 'SETDEV(0,'circuit')'
x0=lire_valeur(fichier)
y0=lire_valeur(fichier)
call lire_mode(fichier)
call lire_echelles(fichier)
'DRAWMODE('largeur_trait'):CONVERT(0,0):SETPINS(0,0):PUTPART("'comp'",'x0','y0')'; objet=result; composant=objet
objets=objets+1
end
when type=17 then do /* définition groupe */
do 5
lt=lire_valeur(fichier)
end
end
when type=19 then do /* NOM_SYMBOLE_ALTERNÉ */
comp=lire_chaine(fichier)
circuit=lire_octet(fichier)
if circuit>0 then 'SETDEV(0,'circuit')'
x0=lire_valeur(fichier)
y0=lire_valeur(fichier)
call lire_mode(fichier)
call lire_echelles(fichier)
'DRAWMODE('largeur_trait'):CONVERT(0,1):SETPINS(0,1):PUTPART("'comp'",'x0','y0')'; objet=result; composant=objet
objets=objets+1
end
when type=20 then do /* NOM_SYMBOLE_ALTERNÉ_SANS_BORNES */
comp=lire_chaine(fichier)
circuit=lire_octet(fichier)
if circuit>0 then 'SETDEV(0,'circuit')'
x0=lire_valeur(fichier)
y0=lire_valeur(fichier)
call lire_mode(fichier)
call lire_echelles(fichier)
'DRAWMODE('largeur_trait'):CONVERT(0,1):SETPINS(0,0):PUTPART("'comp'",'x0','y0')'; objet=result; composant=objet
objets=objets+1
end
when type=21 then do /* Trait personnalisé */
lt=lire_octet(fichier)
'DRAWMODE('0-lt')'
x0=lire_valeur(fichier)
y0=lire_valeur(fichier)
x1=lire_valeur(fichier)
y1=lire_valeur(fichier)
'DRAW('x0','y0','x1','y1')'; objet=result
objets=objets+1
end
when type=22 then do /* boîte */
lt=lire_octet(fichier)
'DRAWMODE('0-lt')'
x0=lire_valeur(fichier)
y0=lire_valeur(fichier)
x1=lire_valeur(fichier)
y1=lire_valeur(fichier)
'BOX('x0','y0','x1','y1')'; objet=result
objets=objets+1
end
otherwise do
'MESSAGE("Donnée inconnue: 'type'")'
leave
end
end
if groupe>0 then do
if g.groupe ~= "G."||groupe then g.groupe=g.groupe||','||objet
else g.groupe=objet
if groupe>gmaxi then gmaxi=groupe
end
end
close(fichier)
'MESSAGE("Fin de fichier atteinte"+CHR(10)+"'objets' objets lus"):UNLOCK(-1)'
do i=1 to gmaxi
if g.i ~= "G."||i then 'GROUP('g.i')'
end
end
else 'MESSAGE("Ouverture fichier impossible")'
'UNLOCK(-1)'
exit
lire_mode: procedure
parse arg fichier
mode=lire_octet(fichier)
if mode>15 then mode=mode-16
if mode>7 then mode=mode-8
if mode>3 then do
'SYMMETRY(0,1)'
mode=mode-4
end
else 'SYMMETRY(0,0)'
'ROTATE(0,'mode')'
return
lire_echelles: procedure
parse arg fichier
eh=lire_octet(fichier)*100
ev=lire_octet(fichier)*100
'SETSCALE(0,'eh','ev')'
return
lire_chaine: procedure
parse arg fichier
l=""
do forever
c=readch(fichier,1)
if c='00'x then return l
l=l||c
if eof(fichier) then return l /* au cas où il n'y aurait pas de 0 terminal! */
end
lire_valeur: procedure
parse arg fichier
v=lire_octet(fichier)*256
v=v+lire_octet(fichier)
return v
lire_octet: procedure expose objets
parse arg fichier
c=readch(fichier,1)
if eof(fichier) then return "FIN"
v=0
if bittst(c,0) then v=1
if bittst(c,1) then v=v+2
if bittst(c,2) then v=v+4
if bittst(c,3) then v=v+8
if bittst(c,4) then v=v+16
if bittst(c,5) then v=v+32
if bittst(c,6) then v=v+64
if bittst(c,7) then v=v+128
return v
ParseFileName: procedure
parse arg FilePath, Part
Divpos = max(lastpos(':',FilePath),lastpos('/',FilePath))+1
if abbrev('FILE', upper(Part))
then return substr(FilePath, DivPos)
else
return strip(left(FilePath, DivPos-1), 'T', '/')
doublage_guillemets: procedure
parse arg chaine
t=''
do i=1 to length(chaine)
c = substr(chaine,i,1)
if c='"' then c=c||'"'
t=t||c
end
return t
/* Traitement des erreurs, interruption du programme */
syntax:
erreur=RC
if (fichier) close(fichier)
'MESSAGE("Erreur de syntaxe"+CHR(10)+"en ligne 'SIGL'"+CHR(10)+"'errortext(erreur)'"):UNLOCK(-1)'
exit
error:
if (fichier) close(fichier)
'MESSAGE("Erreur en ligne 'SIGL'"):UNLOCK(-1)'
exit